home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d13
/
nuf210.arc
/
MATCH.C
< prev
next >
Wrap
Text File
|
1990-06-14
|
2KB
|
95 lines
#include <stdlib.h>
#include <string.h>
static int I_Match (char *Str, char *Pat);
static int S_Match (char *S, char *P, int Anchor);
int
Match (char *Str, char *Pat) {
static char S_Name[66], S_Ext[4];
static char P_Name[66], P_Ext[4];
char *p1;
if ( (p1 = strrchr(Str, '\\')) == NULL) p1 = Str;
else ++p1;
if ( (p1 = strchr(p1, '.')) != NULL ) {
*p1 = '\0';
strcpy(S_Name, Str);
strcpy(S_Ext, p1+1);
*p1 = '.';
}
else {
strcpy(S_Name, Str);
S_Ext[0] = '\0';
}
if ( (p1 = strrchr(Pat, '\\')) == NULL) p1 = Pat;
else ++p1;
if ( (p1 = strchr(p1, '.')) != NULL ) {
*p1 = '\0';
strcpy(P_Name, Pat);
strcpy(P_Ext, p1+1);
*p1 = '.';
}
else {
strcpy(P_Name, Pat);
strcpy(P_Ext, "*");
}
if ( !I_Match(S_Name, P_Name) ) return(0);
if ( (P_Ext[0] == '\0') && (S_Ext[0] != '\0') ) return(0);
if ( !I_Match(S_Ext, P_Ext) ) return(0);
return(1);
}
static int
I_Match (char *Str, char *Pat) {
char *p, *p1, *p2;
int t;
if ( (p1 = strchr(Pat, '*')) == NULL)
return( S_Match(Str, Pat, 1) );
if (Pat[0] != '*') {
*p1 = '\0';
t = S_Match(Str, Pat, 0);
*p1 = '*';
if (!t) return(0);
}
if (Pat[strlen(Pat)-1] != '*') {
p2 = strrchr(Pat, '*') + 1;
if ( !S_Match(&Str[strlen(Str) - strlen(p2)], p2, 1) )
return(0);
}
p = Str;
while ( (p2 = strchr(++p1, '*')) != NULL ) {
*p2 = '\0';
while ( (p = strchr(p, p1[0])) != NULL ) {
if ( S_Match(p, p1, 0) ) break;
++p1;
}
if (p == NULL) return(0);
p += strlen(p1);
*p2 = '*';
p1 = p2;
}
return(1);
}
static int
S_Match (char *S, char *P, int Anchor) {
while (*P != '\0') {
if ( (*S == *P) || (*P == '?') ) {
S++;
P++;
}
else return(0);
}
if ( Anchor && (*S != '\0') ) return(0);
return(1);
}